]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ibusCandidatePopup: Use an internal actor to track IM focus position
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 8 Oct 2019 10:22:34 +0000 (12:22 +0200)
committerCarlos Garnacho <mrgarnacho@gmail.com>
Tue, 8 Oct 2019 17:12:43 +0000 (17:12 +0000)
We share this actor with other shell menus, which arguably track a different
"cursor" as we care of the caret/anchor text positions, and menus care about
pointer click coordinates.

Use a standalone actor for this, so popups/IM are entirely decoupled.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1571
js/ui/ibusCandidatePopup.js

index b9d20926156e4a7b1a184a6e04d2d6c6b6ee672a..9f23f578c03232b3f01b61114376d54a064cbad9 100644 (file)
@@ -126,6 +126,9 @@ Signals.addSignalMethods(CandidateArea.prototype);
 
 var CandidatePopup = class CandidatePopup {
     constructor() {
+        this._dummyCursor = new St.Widget({ opacity: 0 });
+        Main.layoutManager.uiGroup.add_actor(this._dummyCursor);
+
         this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP);
         this._boxPointer.visible = false;
         this._boxPointer.style_class = 'candidate-popup-boxpointer';
@@ -272,9 +275,11 @@ var CandidatePopup = class CandidatePopup {
     }
 
     _setDummyCursorGeometry(x, y, w, h) {
-        Main.layoutManager.setDummyCursorGeometry(x, y, w, h);
+        this._dummyCursor.set_position(Math.round(x), Math.round(y));
+        this._dummyCursor.set_size(Math.round(w), Math.round(h));
+
         if (this._boxPointer.visible)
-            this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
+            this._boxPointer.setPosition(this._dummyCursor, 0);
     }
 
     _updateVisibility() {
@@ -284,7 +289,7 @@ var CandidatePopup = class CandidatePopup {
                           this._candidateArea.actor.visible));
 
         if (isVisible) {
-            this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
+            this._boxPointer.setPosition(this._dummyCursor, 0);
             this._boxPointer.open(BoxPointer.PopupAnimation.NONE);
             this._boxPointer.raise_top();
         } else {